//package com.zbb.exam_system.interceptor;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.web.method.HandlerMethod;
//import org.springframework.web.servlet.HandlerInterceptor;
//import org.springframework.web.servlet.ModelAndView;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.util.Arrays;
//
//@Slf4j
//public class MyInterceptor implements HandlerInterceptor {
//    /**
//     * 在控制器方法执行之前做的操作
//     * @param req
//     * @param res
//     * @param o
//     * @return
//     * @throws Exception
//     */
//    @Override
//    public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object o) throws Exception {
//        log.info("控制器方法执行之前做的操作...");
//        if (o instanceof HandlerMethod) {
//            HandlerMethod handlerMethod = (HandlerMethod) o;
//            log.info("要执行的控制器类：" + handlerMethod.getBeanType().getName());
//            log.info("要执行的控制器方法：" + handlerMethod.getMethod().getName());
//            log.info("要执行的控制器方法传入的参数：" + Arrays.toString(handlerMethod.getMethodParameters()));
//        }
//        //这里的返回值如果为false，就表示执行后面的拦截器和控制器不执行
//        //如果要放行，则这个方法要返回true
//        return true;
//    }
//
//    /**
//     * 控制器方法执行完毕，视图返回之前
//     * @param req
//     * @param res
//     * @param o
//     * @param mv 控制器方法执行完毕后，此时ModelAndView对象
//     * @throws Exception
//     */
//    @Override
//    public void postHandle(HttpServletRequest req, HttpServletResponse res, Object o, ModelAndView mv) throws Exception {
//        log.info("控制器方法执行完毕，视图返回之前...");
//        //在这里可以通过mv对象来控制最终要返回的视图
//        //mv.setViewName("error");
//    }
//
//    /**
//     * 控制器方法执行完毕，且视图已经返回
//     * @param req
//     * @param res
//     * @param o
//     * @param e 获取控制器方法抛出的异常信息（注意和异常处理器中的冲突，防止处理器中处理掉异常，此处获取不到）
//     * @throws Exception
//     */
//    @Override
//    public void afterCompletion(HttpServletRequest req, HttpServletResponse res, Object o, Exception e) throws Exception {
//        log.info("控制器方法执行完毕，且视图已经返回...");
//        //判空打印错误信息
//        if (null != e){
//            log.info("错误信息："+e.getMessage());
//        }
//    }
//}
